{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import time\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "from sklearn.model_selection import GridSearchCV,StratifiedKFold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train = pd.read_csv(\"RentListingInquries_FE_train.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#用来判断某列是否有缺失值\n",
    "#print(train.isnull().any())\n",
    "\n",
    "y_train = train['interest_level']\n",
    "x_train = train.drop(['interest_level'],axis=1)\n",
    "x_train = np.array(x_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5,shuffle=True,random_state=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "reg_alpha = [0.1,1,1.5,2]    \n",
    "reg_lambda = [0.1,0.2,0.5,1]\n",
    "\n",
    "params = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#确定正则项参数, 这是一个三分类的问题 [2 1 0] 为高、中、低三类\n",
    "xgb1 = XGBClassifier(\n",
    "    learning_rate=0.1,\n",
    "    n_estimators=150,    #第二次确定的学习器数目\n",
    "    max_depth=7,         #确定的树的最大深度\n",
    "    min_child_weight=5,  \n",
    "    gamma=0,\n",
    "    subsample=0.3,\n",
    "    colsample_bytree=0.8,\n",
    "    colsample_bylevel=0.7,\n",
    "    objective='multi:softprob',\n",
    "    seed=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time.struct_time(tm_year=2018, tm_mon=5, tm_mday=28, tm_hour=6, tm_min=49, tm_sec=21, tm_wday=0, tm_yday=148, tm_isdst=0)\n",
      "time.struct_time(tm_year=2018, tm_mon=5, tm_mday=28, tm_hour=9, tm_min=36, tm_sec=43, tm_wday=0, tm_yday=148, tm_isdst=0)\n",
      "{'mean_fit_time': array([ 119.65742307,  119.54216304,  119.86567459,  121.51071014,\n",
      "        119.76478243,  120.30954881,  120.36574855,  125.77897048,\n",
      "        121.49602737,  122.79355464,  121.5170608 ,  123.72669759,\n",
      "        125.40391135,  124.90006571,  119.73109856,  121.89182658]), 'std_fit_time': array([ 0.25352803,  0.29349255,  0.85587527,  1.02914922,  0.26558155,\n",
      "        0.86862849,  1.21345259,  2.10726126,  2.12364595,  1.79934031,\n",
      "        1.74980612,  4.50093879,  3.91481362,  5.54528861,  0.62710335,\n",
      "        1.54596358]), 'mean_score_time': array([ 0.35101748,  0.36605406,  0.35033402,  0.36170678,  0.3549334 ,\n",
      "        0.35564733,  0.36092482,  0.3752039 ,  0.36070833,  0.36974192,\n",
      "        0.37923851,  0.36584187,  0.39247317,  0.37672439,  0.37158256,\n",
      "        0.3691968 ]), 'std_score_time': array([ 0.00239435,  0.02776248,  0.00113396,  0.02110191,  0.00360686,\n",
      "        0.00314451,  0.00896401,  0.00224479,  0.00895496,  0.01160585,\n",
      "        0.03748906,  0.01480074,  0.03692113,  0.0246996 ,  0.02254306,\n",
      "        0.01004828]), 'param_reg_alpha': masked_array(data = [0.1 0.1 0.1 0.1 1 1 1 1 1.5 1.5 1.5 1.5 2 2 2 2],\n",
      "             mask = [False False False False False False False False False False False False\n",
      " False False False False],\n",
      "       fill_value = ?)\n",
      ", 'param_reg_lambda': masked_array(data = [0.1 0.2 0.5 1 0.1 0.2 0.5 1 0.1 0.2 0.5 1 0.1 0.2 0.5 1],\n",
      "             mask = [False False False False False False False False False False False False\n",
      " False False False False],\n",
      "       fill_value = ?)\n",
      ", 'params': [{'reg_alpha': 0.1, 'reg_lambda': 0.1}, {'reg_alpha': 0.1, 'reg_lambda': 0.2}, {'reg_alpha': 0.1, 'reg_lambda': 0.5}, {'reg_alpha': 0.1, 'reg_lambda': 1}, {'reg_alpha': 1, 'reg_lambda': 0.1}, {'reg_alpha': 1, 'reg_lambda': 0.2}, {'reg_alpha': 1, 'reg_lambda': 0.5}, {'reg_alpha': 1, 'reg_lambda': 1}, {'reg_alpha': 1.5, 'reg_lambda': 0.1}, {'reg_alpha': 1.5, 'reg_lambda': 0.2}, {'reg_alpha': 1.5, 'reg_lambda': 0.5}, {'reg_alpha': 1.5, 'reg_lambda': 1}, {'reg_alpha': 2, 'reg_lambda': 0.1}, {'reg_alpha': 2, 'reg_lambda': 0.2}, {'reg_alpha': 2, 'reg_lambda': 0.5}, {'reg_alpha': 2, 'reg_lambda': 1}], 'split0_test_score': array([-0.5870636 , -0.58709532, -0.58851505, -0.58609233, -0.58789634,\n",
      "       -0.58789985, -0.5876558 , -0.58695248, -0.58625235, -0.58567008,\n",
      "       -0.58626193, -0.58722339, -0.58812521, -0.5855409 , -0.58721632,\n",
      "       -0.58876705]), 'split1_test_score': array([-0.59197784, -0.59365986, -0.59346414, -0.59281466, -0.59227371,\n",
      "       -0.59224297, -0.59125805, -0.59173242, -0.59220879, -0.59178852,\n",
      "       -0.58977702, -0.59178307, -0.59121011, -0.59337604, -0.59165954,\n",
      "       -0.59081486]), 'split2_test_score': array([-0.59384095, -0.59139583, -0.59212838, -0.59313451, -0.59310172,\n",
      "       -0.59131432, -0.59136216, -0.59221444, -0.59291583, -0.59439443,\n",
      "       -0.59301742, -0.5933027 , -0.59178506, -0.59273719, -0.59242523,\n",
      "       -0.59280828]), 'split3_test_score': array([-0.58400895, -0.58639921, -0.58508935, -0.58567573, -0.58540853,\n",
      "       -0.58588124, -0.58543088, -0.58643898, -0.58696037, -0.58530837,\n",
      "       -0.58436825, -0.58372763, -0.58534602, -0.58503374, -0.58599298,\n",
      "       -0.58602493]), 'split4_test_score': array([-0.59157157, -0.58973335, -0.59074132, -0.58923771, -0.58952178,\n",
      "       -0.59026042, -0.59091765, -0.58941102, -0.59037382, -0.58773812,\n",
      "       -0.58854941, -0.58969401, -0.58969991, -0.58832308, -0.58828942,\n",
      "       -0.58913148]), 'mean_test_score': array([-0.58969247, -0.58965671, -0.5899876 , -0.589391  , -0.58964042,\n",
      "       -0.58951971, -0.58932481, -0.58934986, -0.58974219, -0.58897998,\n",
      "       -0.5883948 , -0.58914613, -0.58923323, -0.58900223, -0.58911675,\n",
      "       -0.58950934]), 'std_test_score': array([ 0.00361054,  0.00269184,  0.00294622,  0.00317636,  0.00282425,\n",
      "        0.00232591,  0.00238221,  0.00237101,  0.00270091,  0.00355488,\n",
      "        0.00296877,  0.00339385,  0.00232282,  0.00350071,  0.00250869,\n",
      "        0.00225494]), 'rank_test_score': array([14, 13, 16,  9, 12, 11,  7,  8, 15,  2,  1,  5,  6,  3,  4, 10]), 'split0_train_score': array([-0.47979065, -0.48107852, -0.48154974, -0.48339252, -0.48001502,\n",
      "       -0.48050074, -0.48176527, -0.48362944, -0.4833114 , -0.48366383,\n",
      "       -0.485305  , -0.48654819, -0.48774863, -0.48850019, -0.48927166,\n",
      "       -0.49074481]), 'split1_train_score': array([-0.47878015, -0.47866053, -0.47986466, -0.48182244, -0.47902435,\n",
      "       -0.47985557, -0.48052621, -0.48336103, -0.48238626, -0.48237282,\n",
      "       -0.48368679, -0.48554814, -0.48557311, -0.48543959, -0.48717779,\n",
      "       -0.48931495]), 'split2_train_score': array([-0.48055566, -0.47948452, -0.48051815, -0.48214819, -0.47909941,\n",
      "       -0.47927897, -0.48180735, -0.48242941, -0.48284125, -0.48242745,\n",
      "       -0.48361875, -0.486651  , -0.48639174, -0.48628189, -0.48836396,\n",
      "       -0.48856059]), 'split3_train_score': array([-0.47733419, -0.47885356, -0.47973458, -0.48098253, -0.47969897,\n",
      "       -0.48060963, -0.48146206, -0.48479779, -0.4834581 , -0.48308383,\n",
      "       -0.48550781, -0.48762503, -0.48769438, -0.48828441, -0.48918505,\n",
      "       -0.49240752]), 'split4_train_score': array([-0.47752978, -0.47876472, -0.47757721, -0.48071516, -0.47879199,\n",
      "       -0.47972106, -0.48125448, -0.48199454, -0.48184559, -0.4821936 ,\n",
      "       -0.48299637, -0.4857324 , -0.48627778, -0.48685062, -0.48691273,\n",
      "       -0.48958011]), 'mean_train_score': array([-0.47879809, -0.47936837, -0.47984887, -0.48181217, -0.47932595,\n",
      "       -0.47999319, -0.48136307, -0.48324244, -0.48276852, -0.48274831,\n",
      "       -0.48422294, -0.48642095, -0.48673713, -0.48707134, -0.48818224,\n",
      "       -0.4901216 ]), 'std_train_score': array([ 0.00125109,  0.00090206,  0.00130496,  0.00094892,  0.00045637,\n",
      "        0.00049814,  0.00046499,  0.00097992,  0.00059556,  0.00054816,\n",
      "        0.00099787,  0.00074227,  0.00085143,  0.00117027,  0.00098448,\n",
      "        0.00134123])}\n",
      "######################################################################\n",
      "Best: -0.588395 using {'reg_alpha': 1.5, 'reg_lambda': 0.5}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x21dbbbf7940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "grid_sea = GridSearchCV(xgb1,param_grid=params,scoring=\"neg_log_loss\",cv=kfold)\n",
    "\n",
    "print(time.localtime(time.time()))\n",
    "grid_sea.fit(x_train,y_train)\n",
    "print(time.localtime(time.time()))\n",
    "\n",
    "# print(grid_sea.grid_scores_,grid_sea.best_params_,grid_sea.best_score_)\n",
    "print(grid_sea.cv_results_)\n",
    "print(\"######################################################################\")\n",
    "print(\"Best: %f using %s\" % (grid_sea.best_score_, grid_sea.best_params_))\n",
    "\n",
    "test_means = grid_sea.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid_sea.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid_sea.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid_sea.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "\n",
    "pd.DataFrame(grid_sea.cv_results_).to_csv('house_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "for i, value in enumerate(reg_alpha):\n",
    "    plt.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel( 'reg_alpha' )\n",
    "plt.ylabel( 'Log Loss' )\n",
    "plt.savefig( 'reg_alpha_vs_reg_lambda1.png' )\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### 运行时间约2个半小时 。 结果： {'reg_alpha': 1.5, 'reg_lambda': 0.5}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
